import numpy as np


def get_matrix(data, depth=None, direction=0):
    """
    对于一个三维的数组组成的的矩阵列表，一维是行数，二维是列数，三维是深度（即：矩阵的列表数）。
    :param data: 矩阵或矩阵列表。
    :param depth: 深度。
    :param direction: 方向，0：表示第 1 维是深度，1：表示第 3 维是深度。
    :return: 矩阵。
    """
    if depth is None:
        return data

    matrix = np.array(data)

    width = matrix.shape[2]
    height = matrix.shape[1]

    if direction > 0:
        width = matrix.shape[1]
        height = matrix.shape[0]

    return slice_matrix(matrix, 0, 0, width, height, depth, direction)


def slice_matrix(data, x, y, width, height, depth=None, direction=0):
    """
    从指定的的矩阵列表中切出其中的一小块。
    :param data: 源矩阵。
    :param x: 矩阵切片的开始位置的 x 坐标。
    :param y: 矩阵切片的开始位置的 y 坐标。
    :param width: 宽度。
    :param height: 高度。
    :param depth: 使用通道，默认则切片成 width X height X 3 的矩阵。
    :param direction: 方向，0：表示第 1 维是深度，1：表示第 3 维是深度。
    :return:切片后的矩阵。
    """

    if depth is None:
        return data[0:data.shape[0], y:y+height, x:x+width]

    if direction > 0:
        return data[y:y+height, x:x+width, depth]

    return data[depth, y:y+height, x:x+width]

if __name__ == "__main__":
    m = np.zeros((4, 3, 2))
    v = get_matrix(m, 0)
    print(v)
